﻿using Microsoft.AspNetCore.Mvc.Filters;

namespace XKJ.OAWeb.Api.Filters
{
    /// <summary>
    /// Aop面向切面的思想，采用异常过滤器统一处理控制器方法执行时发生的异常
    /// </summary>
    public class OAwebExceptionFilter : IExceptionFilter
    {
        private readonly ILogger<OAwebExceptionFilter> _logger;

        public OAwebExceptionFilter(ILogger<OAwebExceptionFilter> logger)
        {
            _logger = logger;
        }

        /// <summary>
        /// 在此方法中可以拿到异常信息，并记录到日志文件中，或者记录数据库的日志表中
        /// </summary>
        /// <param name="context"></param>
        /// <exception cref="NotImplementedException"></exception>
        public void OnException(ExceptionContext context)
        {
            //在方法中处理异常，写入Nlog日志
            Exception ex = context.Exception;
            var message = "错误信息为" + ex.Message;
            //写入日志
            _logger.LogError(message);
            //把异常标记为已处理
            context.ExceptionHandled = true;
        }
    }
}
